#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/wait.h>

#define NUM 32
int main()
{

  //设置一个环境变量，为的是 让子进程拿到
  //因为环境变量具有全局属性
  char *const _env[NUM]={
    (char*)"xty=123456789",
    NULL
  };
  pid_t id = fork();

  if(id == 0)
  {
    //子进程
    // ls -a -l
    printf("子进程开始执行，pid = %d \n",getpid());
    //传入指针数组
    char *const _argv[NUM] = {
     (char*)"ls",
     (char*)"-l",
      (char*)"-i",
      NULL
    };
    execle("./myexe", "mycmd", "-a", NULL, _env);
    //execv("/usr/bin/ls",_argv);
    //execvp("ls",_argv);   //因为环境变量的存在，我们可以只输入ls便可找到该文件。
    //execlp("ls", "ls", "-l", "-i", NULL);
    exit(1);
  }
  else{
    //父进程
    printf("父进程开始等待，pid =%d \n", getpid());
    int status = 0;
    pid_t ret = waitpid(-1, &status, 0); //阻塞等待
    if(ret>0)
    {
      printf("等待成功,退出码为：%d \n", WEXITSTATUS(status));
    }
  }
  return 0;
}



//int main()
//{
//  printf("当前进程开始！\n");
//  //execl("/usr/bin/ls","ls","--color=auto","-l",NULL);
//  //一旦调用成功，后续代码都不会执行了！！！“
//  //execl("/usr/bin/ls","ls","--color=auto","-l", "-i",NULL);
//  //execl("/usr/bin/top", "top", NULL);
//  execv("/usr/bin/top","ls -a -l");
//  printf("当前进程结束！\n");
//  return 0;
//}
